from sqlalchemy import Table, Column, Integer, String
from sqlalchemy.orm import mapper
from database import metadata, db_session, init_db, engine
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship, backref
from proyecto import Proyecto, proyecto
from usuario import Usuario, usuario
from tipoItem import TipoItem, tipoitem
from item import Item, item
from tipoCampo import TipoCampo, tipocampo
from tipoRelacion import TipoRelacion, tiporelacion
from historialItem import historialItem, HistorialItem
from historialItem import HistorialItem, historialItem


class HistorialRelacion(object):
    """ Clase que define el modelo de la tabla de historial de relacines entre items """
    
    def __init__(self, historial=None, item1=None, item2=None, tipo=None):
        """ Metodo init """
        self.historial = historial
        self.item1 = item1
        self.item2 = item2
        self.tipo = tipo

    def __repr__(self):
        return "hola"


historialRelacion = Table('historialrelacion', metadata,
    Column('idhistorialrelacion', Integer, primary_key=True),                      
#     Column('idrelacionitem', Integer, primary_key=True),
    Column('idhistorialitem', Integer, ForeignKey('historialitem.idhistorialitem')),
    Column('iditem1', Integer, ForeignKey('item.iditem')),
    Column('iditem2', Integer, ForeignKey('item.iditem')),
    Column('idtipo', Integer, ForeignKey('tiporelacion.idtiporelacion'))

)
mapper(HistorialRelacion, historialRelacion, properties={
    'historialItem' : relationship(HistorialItem, backref='historialRelaciones'),
    'item1' : relationship(Item, primaryjoin= (Item.iditem == historialRelacion.c.iditem1)),
    'item2' : relationship(Item, primaryjoin= (Item.iditem == historialRelacion.c.iditem2)),
    'tipoRelacion' : relationship(TipoRelacion, backref='historialRelaciones')
#        , properties={
#     'historialItem' : relationship(HistorialItem, backref='historialRelaciones', primaryjoin= (HistorialItem.idhistorialitem == historialRelacion.c.idhistorialitem)),                                       
#     'item1' : relationship(Item, primaryjoin= (Item.iditem == historialRelacion.c.iditem1)),
#     'item2' : relationship(Item, primaryjoin= (Item.iditem == historialRelacion.c.iditem1)),
#     'tipo' : relationship(TipoRelacion, backref='historialRelaciones')}
       })
